﻿using Modelos;
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using System.Web.Security;
using WebMatrix.WebData;

namespace Consulta.Controllers
{
    public class AccountController : Controller
    {
        private DataContextGeneral DataContext = new DataContextGeneral();

        public ActionResult Index()
        {
            ViewBag.Empresas = DataContext.Empresas;
            return View(DataContext.Usuarios.ToList());
        }

        [HttpGet]
        public ActionResult Add()
        {
            ViewBag.ListaEmpresas = DataContext.Empresas.ToList();
            return View();
        }

        /*
        [HttpPost]
        public ActionResult Add(Usuario unUsuario, string password)
        {
            if (ModelState.IsValid)
            {
                WebSecurity.CreateUserAndAccount(unUsuario.UserName, password, new
                {
                    IdEmpresa = unUsuario.IdEmpresa,
                    RealName = unUsuario.RealName,
                    Mail = unUsuario.Mail
                });

                return RedirectToAction("Index");
            }

            ViewBag.ListaEmpresas = DataContext.Empresas.ToList();
            return View("Add", model: unUsuario);
        }
         * */

        [HttpPost]
        public ActionResult Add(ReigstroFormData usuario)
        {
            if (ModelState.IsValid)
            {
                WebSecurity.CreateUserAndAccount(usuario.UserName, usuario.Password, new
                {
                    realName = usuario.RealName,
                    mail = usuario.Mail,
                    IdEmpresa = usuario.IdEmpresa,

                });

                return RedirectToAction("Index","Account");
            }

            ViewBag.ListaEmpresas = DataContext.Empresas.ToList();
            return View("Add", model: usuario);
        }

        [HttpGet]
        public ActionResult Login()
        {
            return View();
        }

        [HttpPost]
        public ActionResult Login(string username, string password)
        {   
            if (WebSecurity.Login(username, password, false))
            {
                return RedirectToAction("Index", "Consultas");
            }
            return View();
        }

        public ActionResult Logout()
        {
            WebSecurity.Logout();
            return RedirectToAction("Index");
        }

    }

    public class ReigstroFormData
    {
        [Required(ErrorMessage = "Debe Ingresar un Nombre de Usuario")]
        [Display(Name = "Nombre Usuario: ")]
        public string UserName { get; set; }

        [Required]
        [MinLength(4,ErrorMessage="La contraseña debe poseer almenos 4 caracteres validos")]
        [Display(Name = "Contraseña ")]
        public string Password { get; set; }

        // Notar que uso el nombre completo, no solo Compare porque la clase compare existe tanto en el namespace
        // MVC como en DataAnnotations y por eso necesito el nombre completo para desambiguar.
        [System.ComponentModel.DataAnnotations.Compare("Password",ErrorMessage="Las Contraseñas No Coinciden")]
        public string CheckPassword { get; set; }

        [Required(ErrorMessage = "Debe Ingresar un Nombre Valido")]
        [Display(Name = "Primer Nombre: ")]
        public string RealName { get; set; }

        [Required(ErrorMessage = "Debe Ingresar una Direccion de Email Valida")]
        [Display(Name = "Email: ")]
        public string Mail { get; set; }

        [Required]
        [Display(Name = "Empresa: ")]
        public int IdEmpresa { get; set; }
    }
}
